package com.sc.nft.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.sc.nft.entity.SaasTaskTemplate;
import com.sc.nft.entity.dto.MerchantAvailabilityDTO;
import com.sc.nft.entity.vo.SaasTaskTemplatePageVO;
import com.sc.nft.enums.SaasTaskStatusEnum;
import com.sc.nft.enums.SaasTaskTypeEnum;
import com.sc.nft.mapper.SaasTaskTemplateMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 任务基础表(SaasTaskTemplate)表Dao层
 *
 * @author 王伟成
 * @since 2024-01-12 15:47:06
 */
@Slf4j
@Repository
public class SaasTaskTemplateDao extends ServiceImpl<SaasTaskTemplateMapper, SaasTaskTemplate> {
    public IPage<SaasTaskTemplatePageVO> isStart(Page<SaasTaskTemplate> mp) {
        LambdaQueryWrapper<SaasTaskTemplate> objectLambdaQueryWrapper = Wrappers.lambdaQuery();
        objectLambdaQueryWrapper.orderByDesc(SaasTaskTemplate::getId);
        return page(mp, objectLambdaQueryWrapper).convert(data -> {
            SaasTaskTemplatePageVO saasTaskTemplatePageVO = new SaasTaskTemplatePageVO();
            saasTaskTemplatePageVO.setTaskType(data.getTaskType());
            saasTaskTemplatePageVO.setId(data.getId());
            saasTaskTemplatePageVO.setSaasTaskStatus(data.getTaskStatus());
            saasTaskTemplatePageVO.setUseCommercial(data.getUseCommercial());
            return saasTaskTemplatePageVO;
        });
    }
    public List<SaasTaskTemplate> getIsStart() {
        return this.lambdaQuery().eq(SaasTaskTemplate::getTaskStatus, SaasTaskStatusEnum.START).list();
    }
    public Boolean getSaasTaskType(SaasTaskTypeEnum saasTaskType) {
        LambdaQueryWrapper<SaasTaskTemplate> objectLambdaQueryWrapper = Wrappers.lambdaQuery();
        objectLambdaQueryWrapper.eq(SaasTaskTemplate::getTaskType, saasTaskType);
        objectLambdaQueryWrapper.eq(SaasTaskTemplate::getUseCommercial, Boolean.TRUE);
        return SqlHelper.retBool(this.count(objectLambdaQueryWrapper));
    }
    public void merchantAvailability(MerchantAvailabilityDTO merchantAvailabilityDTO) {
        this.lambdaUpdate().eq(SaasTaskTemplate::getId, merchantAvailabilityDTO.getId()).set(SaasTaskTemplate::getUseCommercial, merchantAvailabilityDTO.getUseCommercial()).update();
    }
}
